package com.xxx.system.service.impl;

import com.xxx.system.domain.Menu;
import com.xxx.system.mapper.MenuMapper;
import com.xxx.system.service.IMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author BoWei Wang
 * @date 2025/8/5
 */
@Service
public class MenuServiceImpl implements IMenuService {

    @Autowired
    private MenuMapper menuMapper;

    @Override
    public List<Menu> getMenuTree() {
        // 定义返回的所有父类型集合
        List<Menu> typeTree = new ArrayList<>();
        // 所有类型
        List<Menu> all = menuMapper.findAll();
        // 将所有类型放入map集合，方便通过子类型的parentId获取父类型
        // key为id，value为类型对象(行数据)
        Map<Long, Menu> typeMap = new HashMap<>();
        for (Menu menu : all) {
            typeMap.put(menu.getId(), menu);
        }
        for (Menu menu : all) {
            // 判断父类型id是否为空
            if (menu.getParentId() == null) {
                // 父类型id为空则为父类型,将父类型放入父类型集合
                typeTree.add(menu);
            } else {
                // 否则为子类型
                // 通过子类型的父类型id从map集合拿到父类型
                Menu parent = typeMap.get(menu.getParentId());
                // 防空判断
                if (parent != null) {
                    // 拿到父类型添加子类型
                    parent.getChildren().add(menu);
                }
            }
        }
        return typeTree;
    }
}
